package cockpit.desarollo.DAO;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

import cockpit.DAO.interfaz.IProducto;
import cockpit.comm.DTO.DatosException;
import cockpit.comm.DTO.ProductoDTO;
import cockpit.desarrollo.ConectDB.Conneccion;
import cockpit.desarrollo.ConectDB.Constantes;

public class ProductoDAO implements IProducto
{
    private final String nombreTablaProductos = Constantes.nombreTablaProductos;
    
    private final String nombreTablaViews = Constantes.nombreTablaViews;
    
    private final String nombreTablaReViews = Constantes.nombreTablaReViews;
    
    private final String nombreTablaInfoProducto = Constantes.nombreTablaInfoProducto;
    
    private final String nombreTablaInfoEnvio= Constantes.nombreTablaInfoEnvio;
    
    private final String nombreTablaImagenes = Constantes.nombreTablaImagenes;
    

    public ProductoDAO( )
    {

    }
    
    private Connection getConnect() throws SQLException{
        return Conneccion.getConeccion( );
    }

    /**
     * 
     * @param datos Campos que entran en la consulta como IDUSUARIO
     * @param datosCondicionales condicionales escritos algo=algo
     * @param tablas
     * @param ini
     * @param fin
     * @param order
     * @return
     * @throws SQLException
     * @throws DatosException
     */
    private ArrayList<ProductoDTO> getBD(String[] datos, String[] datosCondicionales , String[] tablas, int ini, int fin ,int order) throws SQLException, DatosException
    {       
            
            return Conneccion.getProductosBD( datos, datosCondicionales, tablas, ini, fin, order );
      
    }
    
    /**
     * 
     * @param datos datos para insertar
     * @param tabla tabla
     * @throws DatosException
     * ejemplo 
     *  
        String[] datos={"idusuarios="+idusuarios,
                "idCategoria="+idCategoria,
                "cantidad="+cantidad,
                "costoVendedor="+costoVendedor,
                "costoCockpit="+costoCockpit,
                "nombreProducto="+nombreProducto,
                "descripcionProducto="+descripcionProducto,
                "historiaProducto="+historiaProducto,
                "Productoscol="+productoscol
                
        };        
        String tabla=nombreTablaProductos;
        insertBD(datos, tabla );
     */
    private void insertBD(String [] datos, String tabla ) throws DatosException
    {
       Conneccion.insertBD( datos, tabla );

    }
    /**
     * 
     * @param datos
     * @param datosCondicionales
     * @param tabla
     * @throws DatosException
     * ejemplo 
     *  String[] datos={"nombreProducto='"+nombreProducto+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;
     */
    private void updateBD(String[] datos, String[] datosCondicionales , String tabla ) throws DatosException
    {
        Conneccion.updateBD( datos, datosCondicionales, tabla );     
    }

    /**
     * 
     * @param datos
     * @param datosCondicionales
     * @param tabla
     * @throws DatosException
     */
            
    private void eliminarBD(String[] datos, String[] datosCondicionales , String tabla ) throws DatosException
    {
        Conneccion.eliminarBD( datos, tabla );
    }

    public ArrayList<ProductoDTO> getProductosNombre(String nombre ) throws DatosException, SQLException
    {
        String[] datos={"*"};
        String[] datosCondicionales={"nombre='"+nombre+"'"};
        String[] tablas={nombreTablaProductos};        
        return getBD(datos, datosCondicionales ,tablas, 0, 1000 ,1);
    }

    
    public ArrayList<ProductoDTO> getProductosCategoria(int Categoria ) throws DatosException, SQLException
    {
        String[] datos={"*"};
        String[] datosCondicionales={"categoria="+Categoria};
        String[] tablas={nombreTablaProductos};        
        return getBD(datos, datosCondicionales ,tablas, 0, 1000 ,1);
    }

    
    public ArrayList<ProductoDTO> getProductosEmpresa(int idusuario ) throws DatosException, SQLException
    {
        String[] datos={"*"};
        String[] datosCondicionales={"idusuario="+idusuario };
        String[] tablas={nombreTablaProductos};        
        return getBD(datos, datosCondicionales ,tablas, 0, 1000 ,1);
    }

    @Override
    public ArrayList<ProductoDTO> getUltimosProductosEmpresa(int idusuario ) throws DatosException, SQLException
    {
        String[] datos={"*"};
        String[] datosCondicionales={ };
        String[] tablas={nombreTablaProductos};        
        return getBD(datos, datosCondicionales ,tablas, 0, 1000 ,1);
        
    }

    @Override
    public ArrayList<ProductoDTO> getUltimosProductos( ) throws DatosException, SQLException
    {
        String[] datos={"*"};
        String[] datosCondicionales={};
        String[] tablas={nombreTablaProductos};        
        return getBD(datos, datosCondicionales ,tablas, 0, 1000 ,1);
    }

    @Override
    public Long eliminarProducto( Long id ) throws DatosException
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void agregarProducto( long idusuarios, long idCategoria, int cantidad, int costoVendedor, int costoCockpit, String nombreProducto, String descripcionProducto, String historiaProducto, String productoscol ) throws DatosException
    {
        
        String[] datos={"idusuarios="+idusuarios,
                "idCategoria="+idCategoria,
                "cantidad="+cantidad,
                "costoVendedor="+costoVendedor,
                "costoCockpit="+costoCockpit,
                "nombreProducto="+nombreProducto,
                "descripcionProducto="+descripcionProducto,
                "historiaProducto="+historiaProducto,
                "Productoscol="+productoscol
                
        };        
        String tabla=nombreTablaProductos;
        insertBD(datos, tabla );
        
    }

    @Override
    public void editarProducto( long idProducto, long idusuarios, long idCategoria, int cantidad, int costoVendedor, int costoCockpit, String nombreProducto, String descripcionProducto, String historiaProducto, String productoscol )
            throws DatosException
    {
        String[] datos={"Productoscol='"+productoscol+"'",
                "idCategoria='"+idCategoria+"'",
                "cantidad='"+cantidad+"'",
                "costoVendedor='"+costoVendedor+"'",
                "costoCockpit='"+costoCockpit+"'",
                "nombreProducto='"+nombreProducto+"'",
                "descripcionProducto='"+descripcionProducto+"'",
                "historiaProducto='"+historiaProducto+"'"
                };
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarColProducto( long idProducto, String productoscol ) throws DatosException
    {
        String[] datos={"Productoscol='"+productoscol+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarHistoriaProducto( long idProducto, String historiaProducto ) throws DatosException
    {
        String[] datos={"historiaProducto='"+historiaProducto+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarDescripcionProducto( long idProducto, String descripcionProducto ) throws DatosException
    {
        String[] datos={"descripcionProducto='"+descripcionProducto+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarNombreProducto( long idProducto, String nombreProducto ) throws DatosException
    {
        String[] datos={"nombreProducto='"+nombreProducto+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarCostoCockpitProducto( long idProducto, long costoCockpit ) throws DatosException
    {
        String[] datos={"costoCockpit='"+costoCockpit+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarCostoVendedorProducto( long idProducto, long costoVendedor ) throws DatosException
    {
        String[] datos={"costoVendedor='"+costoVendedor+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarCategoriaProducto( long idProducto, long idCategoria ) throws DatosException
    {
        String[] datos={"idCategoria='"+idCategoria+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void editarCantidadProducto( long idProducto, long cantidad ) throws DatosException
    {
        String[] datos={"cantidad='"+cantidad+"'"};
        String[] datosCondicionales={"idProductos='"+idProducto+"'"};
        String tabla=nombreTablaProductos;
        updateBD(datos, datosCondicionales , tabla ) ;

    }

    @Override
    public void agregarReviewProducto( long idusuarios, long idProducto, int calificacion, String opinion ) throws DatosException
    {
        String[] datos={"idusuarios="+idusuarios,
                "idProducto="+idProducto,
                "calificacion="+calificacion,
                "opinion="+opinion
                
        };        
        String tabla=nombreTablaReViews;
        insertBD(datos, tabla );
    }

    @Override
    public void agregarViewProducto( long idusuarios, long idProducto ) throws DatosException
    {
        String[] datos={"idusuarios="+idusuarios,
                "idProducto="+idProducto
        };        
        String tabla=nombreTablaViews;
        insertBD(datos, tabla );
        
    }

    @Override
    public void agregarImagen( long idusuarios, String nombre, String ruta ) throws DatosException
    {
        String[] datos={"idusuarios="+idusuarios,
                "nombre="+nombre,
                "ruta="+ruta
        };        
        String tabla=nombreTablaImagenes;
        insertBD(datos, tabla );        
    }

    @Override
    public void agregarInfoEnvio( int idProducto, int tiempoEntrega, String medioEnvio, String politicaDevulucion ) throws DatosException
    {
        String[] datos={"idProducto="+idProducto,
                "tiempoEntrega="+tiempoEntrega,
                "medioEnvio="+medioEnvio,
                "politicaDevulucion="+politicaDevulucion
        };        
        String tabla=nombreTablaInfoEnvio;
        insertBD(datos, tabla );
        
    }

    @Override
    public void agregarInfoProducto( int idProducto, String marca, String colores, String cuidado, String peso, String medidas, String materiales ) throws DatosException
    {
        String[] datos={"idProducto="+idProducto,
                "marca="+marca,
                "colores="+colores,
                "cuidado="+cuidado,
                "peso="+peso,
                "medidas="+medidas,
                "materiales="+materiales
        };        
        String tabla=nombreTablaInfoProducto;
        insertBD(datos, tabla );
        
    }
}

